// 设计模式(如单例)的多个实现方式

// extends实现工厂模式
class Animal {
  behavior() {
    print('aaaa');
  }
}

class Dog extends Animal {
  sound() {
    print('ddddd');
  }
}

// implements实现工厂模式
abstract class Dp {
  add();
  save();
  delete();
}

class Mysql implements Dp {
  @override
  add() {
    print('add');
  }

  @override
  delete() {
    print('delete');
  }

  @override
  save() {
    print('save');
  }
}

// with实现工厂模式
class A {
  printA() {
    print('A');
  }
}

class B {
  printB() {
    print('B');
  }
}

class O {
  printO() {
    print('O');
  }
}

class C extends O with A, B {
  printC() {
    print('CCCC');
  }
}

// 实现单例模式

class Singleton {
  static final Singleton _singleton = new Singleton._internal();

  factory Singleton() {
    return _singleton;
  }

  Singleton._internal();
}

main() {
  // 实现工厂模式
  Dog d = new Dog();
  d.behavior();
  d.sound();

  Mysql mysql = new Mysql();
  mysql.add();
  mysql.delete();
  mysql.save();

  C c = new C();
  c.printC();
  c.printA();
  c.printB();
  c.printO();

// 实现单例模式
  var s1 = new Singleton();
  var s2 = new Singleton();
  print(identical(s1, s2)); // true
  print(s1 == s2);
}
